perm filename UTJP[S1,ALS] blob sn#436731 filedate 1979-04-26 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	UTJP :
C00005 ENDMK
CāŠ—;
UTJP :
    begin
    if TOP <> BOT then
	ERROR (WTJP_WITH_NONEMPTY_STACK);
    LABNUM := LABELNUMBER(NAM1);

    with STK[TOP] do
	begin
	if DTYPE <> TYPB then
	    ERROR (WTJP_NEEDS_BOOLEAN);

	if BREPRES = BINTVAL then
	    if IS_CONSTANT(TOP) then
		if ADDRORVAL.FPA.MEMADR.DSPLMT <> 1 then
		    (*TJP, arg false, so no jump*)
		else
		    begin  (*TJP, arg true, so jump always*)
		    JUMPLOC := NEWINSTREC;
		    EMITJOP (XJMPA, 0, UNUSED_OP, ZERO_OP, nil);
		    JUMP_TO_LABEL_RECORD_OR_FIX (JUMPLOC, LABNUM);
		    end

	    else
		begin  (*non-constant bintval*)
		GET_OPERAND (OPND1, TOP);
		JUMPLOC := NEWINSTREC;
		EMITJOP (XJMPZ_NEQ_Q, 0, OPND1, ZERO_OP, nil);
		JUMP_TO_LABEL_RECORD_OR_FIX (JUMPLOC, LABNUM);
		end (*non-constant bintval*)

	else
	    begin  (*bjump representation*)
	    if BJUMPON then
		begin
		INVERT_SKIP (BFALLTHRUSKIPLOC);
		BJUMPON := false;
		end;
	    PTR := BFALSELIST.FIRST;
	    while PTR <> nil do
		begin
		NEXT := JUMPSKIPDEST(PTR);
		FIXJOP (PTR, NEWINSTREC);
		PTR := NEXT;
		end;
	    PTR := BTRUELIST.FIRST;
	    while PTR <> nil do
		begin
		NEXT := JUMPSKIPDEST(PTR);
		JUMP_TO_LABEL_RECORD_OR_FIX (PTR, LABNUM);
		PTR := NEXT;
		end;
	    FALLTHRUJUMP := NEXT_INSTRUCTION(BFALLTHRUSKIPLOC);
	    JUMP_TO_LABEL_RECORD_OR_FIX (FALLTHRUJUMP, LABNUM);
	    end (*bjump representation*);

	end (*with STK[TOP] do*);

    FREEDATUMREGS (TOP);
    POPTOP;
    end (*UTJP*);